[アップデート]EKS Upgrade insights がアドオンや kubelet、kube-proxy などもアップグレード適合性をチェックするようになりました

[アップデート]EKS Upgrade insights がアドオンや kubelet、kube-proxy などもアップグレード適合性をチェックするようになりました

先日、EKS Upgrade insights がアドオンや kubelet、kube-proxy など、より広い範囲をチェックするようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-eks-catalog-upgrade-insights-checks/

何が変わったか

これまでも Upgrade Insights を利用することで、 Kubernetes で廃止予定の API が使われていないかを確認することができました。
Deprecated API Migration Guide で列挙されているような、Kubernetes の世界での古いリソース利用を検知する形です。
ただ、実際に EKS をアップグレードしようとすると、アドオンがアップグレード先に対応しているかといった EKS 固有の内容も確認する必要がありました。
※ アドオンは AWS によって抽象化されているため、Kubernetes マニフェストとして定義してデプロイされるわけではありません。一方で、Kubernetes クラスターに Pod としてデプロイされるソフトウェアであり、Kubernetes バージョンとの互換性を考える必要があります。

今回のアップデートでこの辺りのバージョン適合性も確認可能になりました!
また、アドオンに限らず kube-proxy、kubelet といった Kuberentes の動作に必須のコンポーネントに関しても Kuberntes バージョンとの適合性を確認可能になっています。

Auto Mode の場合は?

アップデートの内容から考えると若干本筋から外れるのですが、EKS には直近 Auto Mode が追加されています。

https://dev.classmethod.jp/articles/eks-auto-mode/

Auto Mode だと AWS が管理する範囲が増えており、 kubelet や kube-proxy はユーザー管理では無くなっています。
Upgrade Insights においても、ステータスが不明になり、閲覧することができませんでした。

スクリーンショット 2024-12-26 17.47.23.png

スクリーンショット 2024-12-26 17.47.31.png

また、Auto Mode では EBS CSI driver や Pod Identity Agent など、多くのアドオンも AWS 管理になっています。
とはいえ EFS CSI driver や CloudWatch Observability EKS アドオンなど、ユーザー管理する必要があるアドオンも存在しています。
これらの管理については、Auto Mode でも今回のアップデートの恩恵を受けることができそうです。

EKS アドオンのバージョンチェックを確認してみる

アップデート内容がわかりやすそうなので、非 Auto Mode の EKS クラスターで試してみます。
下記設定ファイルで、eksctl を利用して EKS クラスターを作成します。

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: test-cluster
  region: ap-northeast-1
  version: "1.30"

iam:
  withOIDC: true

cloudWatch:
  clusterLogging:
    enableTypes:
      - "audit"
      - "authenticator"
      - "controllerManager"
      - "scheduler"

nodeGroups:
  - name: ng-1
    instanceType: m5.large
    desiredCapacity: 1

autoModeConfig:
  enabled: false

構築完了後、Upgrade Insights を確認してみます。

スクリーンショット 2024-12-27 11.59.32.png

今までも閲覧可能だった「Deprecated APIs removed in Kubernetes v1.32」は合格していますが、「EKS add-on version compatibility」で違反してますね。
違反内容について確認していきます。

スクリーンショット 2024-12-27 11.59.57.png

検知されている CoreDNS アドオンのバージョンを確認すると、v1.11.1-eksbuild.8となっています。

スクリーンショット 2024-12-27 12.00.05.png

EKS 1.30 対応バージョンには含まれています。

% eksctl utils describe-addon-versions --kubernetes-version 1.30 --name coredns | grep AddonVersion
                        "AddonVersions": [
                                        "AddonVersion": "v1.11.4-eksbuild.1",
                                        "AddonVersion": "v1.11.3-eksbuild.2",
                                        "AddonVersion": "v1.11.3-eksbuild.1",
                                        "AddonVersion": "v1.11.1-eksbuild.13",
                                        "AddonVersion": "v1.11.1-eksbuild.11",
                                        "AddonVersion": "v1.11.1-eksbuild.9",
                                        "AddonVersion": "v1.11.1-eksbuild.8",
                                        "AddonVersion": "v1.11.1-eksbuild.6",
                                        "AddonVersion": "v1.11.1-eksbuild.4",
                                        "AddonVersion": "v1.10.1-eksbuild.17",
                                        "AddonVersion": "v1.10.1-eksbuild.15",
                                        "AddonVersion": "v1.10.1-eksbuild.13",
                                        "AddonVersion": "v1.10.1-eksbuild.11",
                                        "AddonVersion": "v1.10.1-eksbuild.10",
                                        "AddonVersion": "v1.10.1-eksbuild.7",

一方で EKS 1.31 には対応していないため、たしかにアップグレードが必要ですね。

% eksctl utils describe-addon-versions --kubernetes-version 1.31 --name coredns | grep AddonVersion
                        "AddonVersions": [
                                        "AddonVersion": "v1.11.4-eksbuild.1",
                                        "AddonVersion": "v1.11.3-eksbuild.2",
                                        "AddonVersion": "v1.11.3-eksbuild.1",
                                        "AddonVersion": "v1.11.1-eksbuild.13",
                                        "AddonVersion": "v1.11.1-eksbuild.11",
                                        "AddonVersion": "v1.10.1-eksbuild.17",
                                        "AddonVersion": "v1.10.1-eksbuild.15",
                                        "AddonVersion": "v1.10.1-eksbuild.13",

最新のバージョンである、v1.11.4-eksbuild.1にアップグレードしてみます。

スクリーンショット 2024-12-27 12.04.39.png

アップグレード後、coredns のステータスが合格に変わっていました。

スクリーンショット 2024-12-28 16.53.25.png

ちなみに、アップグレードした後即時に反映されるようなものではなく、1 日経って再度確認するとステータスが更新されているようなイメージでした。
※ スクリーンショットでは CoreDNS のバージョンアップと合わせて、EBS CSI driver を追加しているので新しく検知されています。

kubelet、kube-proxy のバージョンチェックを確認してみる

kube-apiserver と kubelet のバージョン差異は 3 つまで許容されます。

kubelet must not be newer than kube-apiserver.
kubelet may be up to three minor versions older than kube-apiserver (kubelet < 1.25 may only be up to two minor versions older than kube-apiserver).
Example:
kube-apiserver is at 1.32
kubelet is supported at 1.32, 1.31, 1.30, and 1.29
https://kubernetes.io/releases/version-skew-policy/#kubelet

Upgrade Insights では kube-apiserver と kubelet のバージョン差が 2 以上になりそうな時に検知されるようです。
kubelet のバージョンが 1.28 の際に、コントロールプレーンを 1.30 に上げる前に確認して!という形で警告が出ました。

スクリーンショット 2024-12-27 13.19.34.png

バージョンアップグレード時に 1 つ分の差は毎回発生するので、それを超えて差分が出そうな時に検知する形ですね。
検知されたらコントロールプレーンのバージョンアップの前に EKS ノードを更新した方が良さそうです。

最後に

EKS Upgrade Insights を利用して、より楽かつ安全にバージョンアップをしていきましょう!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.